<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>intervals 查询 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'query-dsl-intervals-query.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-intervals-query.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-intervals-query.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/query-dsl-intervals-query.html" rel="nofollow" target="_blank">../en/query-dsl-intervals-query.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="query-dsl.html">查询领域特定语言(Query DSL)</a></span>
»
<span class="breadcrumb-link"><a href="full-text-queries.html">全文查询</a></span>
»
<span class="breadcrumb-node">intervals 查询</span>
</div>
<div class="navheader">
<span class="prev">
<a href="full-text-queries.html">« 全文查询</a>
</span>
<span class="next">
<a href="query-dsl-match-query.html">匹配(match)查询 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="query-dsl-intervals-query"></a>intervals 查询
</h2>
</div></div></div>

<p>
根据匹配 词项(term) 的顺序和接近程度返回文档。
</p>
<p>
<code class="literal">intervals</code> 查询使用<span class="strong strong"><strong>匹配规则(matching rules)</strong></span>，这些规则由一小组定义构成。

然后将这些规则应用于指定 <code class="literal">字段(field)</code> 中的 词项(term)。
</p>
<p>
这些定义产生的最小区间序列跨越了文本主体中的词项(term)。

这些 间隔(interval) 可以由父源进一步组合和过滤。
</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="intervals-query-ex-request"></a>请求示例
</h3>
</div></div></div>
<p>
下面这个 <code class="literal">intervals</code> 搜索返回字段 <code class="literal">my_text</code> 中包含 <code class="literal">my favorite food</code> 的文档，且 <code class="literal">my favorite food</code> 后面紧跟着 <code class="literal">hot water</code> 或 <code class="literal">cold porridge</code>。
</p>
<p>
这个搜索会匹配字段 <code class="literal">my_text</code> 的值为 <code class="literal">my favorite food is cold porridge</code> 的文档，但不会匹配 <code class="literal">when it's cold my favorite food is porridge</code>。
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _search
{
  "query": {
    "intervals" : {
      "my_text" : {
        "all_of" : {
          "ordered" : true,
          "intervals" : [
            {
              "match" : {
                "query" : "my favorite food",
                "max_gaps" : 0,
                "ordered" : true
              }
            },
            {
              "any_of" : {
                "intervals" : [
                  { "match" : { "query" : "hot water" } },
                  { "match" : { "query" : "cold porridge" } }
                ]
              }
            }
          ]
        }
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/108.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="intervals-top-level-params"></a><code class="literal">intervals</code>的顶级参数
</h3>
</div></div></div>
<div class="variablelist">
<a id="intervals-rules"></a>
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">&lt;field&gt;</code>
</span>
</dt>
<dd>
<p>(必需的，规则<span class="remark">(rule)</span>对象) 你想搜索的字段。</p>
<p>
该参数的值是一个规则(rule)对象，用于根据匹配的词项(term)、顺序(order)和接近性(proximity)来匹配文档。
</p>
<p>可用的规则(rule)包括：</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<a class="xref" href="query-dsl-intervals-query.html#intervals-match" title="match rule parameters"><code class="literal">match</code></a> (匹配)
</li>
<li class="listitem">
<a class="xref" href="query-dsl-intervals-query.html#intervals-prefix" title="prefix rule parameters"><code class="literal">prefix</code></a> (前缀)
</li>
<li class="listitem">
<a class="xref" href="query-dsl-intervals-query.html#intervals-wildcard" title="wildcard rule parameters"><code class="literal">wildcard</code></a> (通配符)
</li>
<li class="listitem">
<a class="xref" href="query-dsl-intervals-query.html#intervals-fuzzy" title="fuzzy rule parameters"><code class="literal">fuzzy</code></a> (模糊)
</li>
<li class="listitem">
<a class="xref" href="query-dsl-intervals-query.html#intervals-all_of" title="all_of rule parameters"><code class="literal">all_of</code></a> (全部)
</li>
<li class="listitem">
<a class="xref" href="query-dsl-intervals-query.html#intervals-any_of" title="any_of rule parameters"><code class="literal">any_of</code></a> (任意一个)
</li>
</ul>
</div>
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="intervals-match"></a><code class="literal">match</code>(匹配) 规则参数
</h3>
</div></div></div>
<p><code class="literal">match</code> 匹配规则匹配 已分析的文本(analyzed text)。</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">query</code>
</span>
</dt>
<dd>
(必需的，string) 你想在指定的 <code class="literal">&lt;field&gt;</code> 中搜索的文本.
</dd>
<dt>
<span class="term">
<code class="literal">max_gaps</code>
</span>
</dt>
<dd>
<p>(可选, integer) 匹配词项之间的最大位置数。比这更远的词项不会被视为匹配。默认值为 <code class="literal">-1</code>。
</p>
<p>
如果未指定或设置为 <code class="literal">-1</code>，则匹配没有宽度限制。

如果设置为 <code class="literal">0</code>，这些词项必须相邻出现。
</p>
</dd>
<dt>
<span class="term">
<code class="literal">ordered</code>
</span>
</dt>
<dd>
(可选，boolean) 如果为 <code class="literal">true</code>，匹配的词项必须按其指定的顺序出现。默认值为 <code class="literal">false</code>。
</dd>
<dt>
<span class="term">
<code class="literal">analyzer</code>
</span>
</dt>
<dd>
(可选，string) 用于分析 <code class="literal">query</code> 中的 词项(term) 的 <a class="xref" href="analysis.html" title="Text analysis">analyzer(分析器)</a>。

默认为 <code class="literal">&lt;field&gt;</code> 的顶级 分析器(analyzer)。
</dd>
<dt>
<span class="term">
<code class="literal">filter</code>
</span>
</dt>
<dd>
(可选，<a class="xref" href="query-dsl-intervals-query.html#interval_filter" title="filter rule parameters">interval filter</a> 规则对象) 一个可选的 interval
filter。
</dd>
<dt>
<span class="term">
<code class="literal">use_field</code>
</span>
</dt>
<dd>
(可选，string)

如果指定了，则匹配此 field 而不是顶级 <code class="literal">&lt;field&gt;</code> 的间隔。

使用 搜索分析器(search analyzer) 分析该字段中的词项(term)。

这将允许你跨多个字段进行搜索，就好像它们是同一个字段；

例如，你可以将相同的文本索引到 带词干(stemmed) 和 不带词干(unstemmed) 的字段，并在不带词干的字段附近搜索带词干的 词元(token)。
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="intervals-prefix"></a><code class="literal">prefix</code>(前缀) 规则参数
</h3>
</div></div></div>
<p>
<code class="literal">prefix</code>(前缀) 规则匹配以指定字符集开头的词项。

这个前缀最多可以扩展到匹配 128 个词项。

如果前缀匹配超过 128 个词项，Elasticsearch 将返回一个错误。

可以在字段映射中使用 <a class="xref" href="index-prefixes.html" title="index_prefixes"><code class="literal">index-prefixes</code></a> 选项来避免这个限制。
</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">prefix</code>
</span>
</dt>
<dd>
(必需的，string) 你希望在顶级 <code class="literal">&lt;field&gt;</code> 中查找的词项的开始字符。
</dd>
<dt>
<span class="term">
<code class="literal">analyzer</code>
</span>
</dt>
<dd>
(可选，string) 用于归一化 <code class="literal">prefix</code> 的 <a class="xref" href="analysis.html" title="Text analysis">analyzer(分析器)</a>。

默认为 <code class="literal">&lt;field&gt;</code> 的顶级 分析器(analyzer)。
</dd>
<dt>
<span class="term">
<code class="literal">use_field</code>
</span>
</dt>
<dd>
<p>(可选，string) 如果指定了，则匹配此 field 而不是顶级 <code class="literal">&lt;field&gt;</code> 的间隔。
</p>
<p>
如果没有单独指定一个 <code class="literal">analyzer</code>，会使用字段的 搜索分析器(search analyzer) 对 <code class="literal">prefix</code> 进行归一化。
</p>
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="intervals-wildcard"></a><code class="literal">wildcard</code>(通配符) 规则参数
</h3>
</div></div></div>
<p>
<code class="literal">wildcard</code> 规则使用一个通配符模式匹配词项。

这个模式最多可以扩展到匹配 128 个词项。

如果前缀匹配超过 128 个词项，Elasticsearch 将返回一个错误。
</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">pattern</code>
</span>
</dt>
<dd>
<p>
(必需的，string) 用于查找匹配的词项的通配符模式。
</p>
<p>该参数支持两个通配符操作符：</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="literal">?</code>，它匹配任意的单个字符
</li>
<li class="listitem">
<code class="literal">*</code>，它可以匹配零个或多个字符，包括一个空字符
</li>
</ul>
</div>
<div class="warning admon">
<div class="icon"></div>
<div class="admon_content">
<p>
避免模式以 <code class="literal">*</code> 或 <code class="literal">?</code>开头。

这可能会增加查找匹配词项所需的迭代次数，并降低搜索性能。
</p>
</div>
</div>
</dd>
<dt>
<span class="term">
<code class="literal">analyzer</code>
</span>
</dt>
<dd>
(可选，string) 用于归一化 <code class="literal">pattern</code> 的 <a class="xref" href="analysis.html" title="Text analysis">analyzer(分析器)</a>。

默认为 <code class="literal">&lt;field&gt;</code> 的顶级 分析器(analyzer)。
</dd>
<dt>
<span class="term">
<code class="literal">use_field</code>
</span>
</dt>
<dd>
<p>(可选，string) 
如果指定了，则匹配此 field 而不是顶级 <code class="literal">&lt;field&gt;</code> 的间隔。
</p>
<p>
如果没有单独指定一个 <code class="literal">analyzer</code>，会使用字段的 搜索分析器(search analyzer) 对 <code class="literal">pattern</code> 进行归一化。
</p>
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="intervals-fuzzy"></a><code class="literal">fuzzy</code>(模糊) 规则参数
</h3>
</div></div></div>
<p>
<code class="literal">fuzzy</code> 规则在由 <a class="xref" href="common-options.html#fuzziness" title="Fuzziness">fuzziness</a> 定义的编辑距离内匹配与所提供的词项相似的词项。

如果模糊扩展匹配超过 128 项，Elasticsearch 将返回错误。

<br/><span class="remark">译者注: 请先了解 "编辑距离" (edit distance) 的有关概念。</span>
</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">term</code>
</span>
</dt>
<dd>
(必需的，string) 要匹配的词项。
</dd>
<dt>
<span class="term">
<code class="literal">prefix_length</code>
</span>
</dt>
<dd>
(可选，integer) 创建扩展时，开头字符保持不变的个数。默认为 <code class="literal">0</code>。
</dd>
<dt>
<span class="term">
<code class="literal">transpositions</code>
</span>
</dt>
<dd>
(可选，boolean) 指示编辑是否包括两个相邻字符的换位(ab → ba)。默认为 <code class="literal">true</code>。
</dd>
<dt>
<span class="term">
<code class="literal">fuzziness</code>
</span>
</dt>
<dd>
(可选，string) 匹配时允许的最大编辑距离。

默认值为 <code class="literal">auto</code>。

有关有效值和更多信息请参考 <a class="xref" href="common-options.html#fuzziness" title="Fuzziness">fuzziness</a>。
</dd>
<dt>
<span class="term">
<code class="literal">analyzer</code>
</span>
</dt>
<dd>
(可选，string) 用于对 <code class="literal">term</code> 进行归一化的 <a class="xref" href="analysis.html" title="Text analysis">analyzer</a>(分析器)。

默认为顶级 <code class="literal">&lt;field&gt;</code> 的分析器(analyzer)。
</dd>
<dt>
<span class="term">
<code class="literal">use_field</code>
</span>
</dt>
<dd>
<p>(可选，string) 如果指定了，则匹配此 field 而不是顶级 <code class="literal">&lt;field&gt;</code> 的间隔。
</p>
<p>
如果没有单独指定一个 <code class="literal">analyzer</code>，会使用字段的 搜索分析器(search analyzer) 对 <code class="literal">term</code> 进行归一化。
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="intervals-all_of"></a><code class="literal">all_of</code>(全部) 规则参数
</h3>
</div></div></div>
<p>
<code class="literal">all_of</code> 规则返回跨越其他规则组合的匹配。
</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">intervals</code>
</span>
</dt>
<dd>
(必需的，规则对象数组) 要组合的规则数组。

所有规则都必须在文档中产生一个匹配项，以便整个源文件匹配。  
</dd>
<dt>
<span class="term">
<code class="literal">max_gaps</code>
</span>
</dt>
<dd>
<p>(可选，integer) 匹配词项之间的最大位置数。由规则产生的间隔比这更远则不会被认为是匹配的。默认值为 <code class="literal">-1</code>。
</p>
<p>
如果未指定或设置为 <code class="literal">-1</code>，则匹配没有宽度限制。

如果设置为 <code class="literal">0</code>，这些词项必须相邻出现。
</p>
</dd>
<dt>
<span class="term">
<code class="literal">ordered</code>
</span>
</dt>
<dd>
(可选，boolean) 如果为 <code class="literal">true</code>，匹配的词项必须按其指定的顺序出现。默认值为 <code class="literal">false</code>。
</dd>
<dt>
<span class="term">
<code class="literal">filter</code>
</span>
</dt>
<dd>
(可选，<a class="xref" href="query-dsl-intervals-query.html#interval_filter" title="filter rule parameters">interval filter</a> 规则对象) 用于过滤返回的间隔的规则。
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="intervals-any_of"></a><code class="literal">any_of</code>(任意一个) 规则参数
</h3>
</div></div></div>
<p><code class="literal">any_of</code> 规则返回由其任意一个子规则产生的间隔。</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">intervals</code>
</span>
</dt>
<dd>
(必需的，规则对象的数组) 要匹配的规则的数组。
</dd>
<dt>
<span class="term">
<code class="literal">filter</code>
</span>
</dt>
<dd>
(可选，<a class="xref" href="query-dsl-intervals-query.html#interval_filter" title="filter rule parameters">interval filter</a> 规则对象) 用于过滤返回的间隔的规则。
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="interval_filter"></a><code class="literal">filter</code>(过滤) 规则参数
</h3>
</div></div></div>
<p>
<code class="literal">filter</code> 规则根据 查询(query) 返回间隔。

有关示例请参考 <a class="xref" href="query-dsl-intervals-query.html#interval-filter-rule-ex" title="Filter example">filter 示例</a>。
</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">after</code>
</span>
</dt>
<dd>
(可选，query 对象) 用于返回 <code class="literal">filter</code> 规则中某个间隔之后的间隔的查询。

<span class="remark">(原文: Query used to return intervals that follow an interval from the filter rule.)</span>
</dd>
<dt>
<span class="term">
<code class="literal">before</code>
</span>
</dt>
<dd>
(可选，query 对象) 用于返回 <code class="literal">filter</code> 规则中某个间隔之前发生的间隔的查询。
</dd>
<dt>
<span class="term">
<code class="literal">contained_by</code>
</span>
</dt>
<dd>
(可选，query 对象) 用于从 <code class="literal">filter</code> 规则中返回间隔所包含的间隔的查询。
</dd>
<dt>
<span class="term">
<code class="literal">containing</code>
</span>
</dt>
<dd>
(可选，query 对象) 用于返回包含 <code class="literal">filter</code> 规则中的间隔的间隔的查询。
</dd>
<dt>
<span class="term">
<code class="literal">not_contained_by</code>
</span>
</dt>
<dd>
(可选，query 对象) 用于返回 <code class="literal">filter</code> 规则中的间隔<span class="strong strong"><strong>不</strong></span>包含的间隔的查询。
</dd>
<dt>
<span class="term">
<code class="literal">not_containing</code>
</span>
</dt>
<dd>
(可选，query 对象) 
用于返回<span class="strong strong"><strong>不</strong></span>包含 <code class="literal">filter</code> 规则中间隔的间隔的查询。
</dd>
<dt>
<span class="term">
<code class="literal">not_overlapping</code>
</span>
</dt>
<dd>
(可选，query 对象) 
用于返回与 <code class="literal">filter</code> 规则中的间隔<span class="strong strong"><strong>不</strong></span>重叠的间隔的查询。
</dd>
<dt>
<span class="term">
<code class="literal">overlapping</code>
</span>
</dt>
<dd>
(可选，query 对象) 
用于返回与 <code class="literal">filter</code> 规则中的间隔重叠的间隔的查询。
</dd>
<dt>
<span class="term">
<code class="literal">script</code>
</span>
</dt>
<dd>
(可选，<a class="xref" href="modules-scripting-using.html" title="How to use scripts">脚本对象</a>)
用于返回匹配文档的脚本。

这个脚本必须返回一个布尔值，<code class="literal">true</code> 或 <code class="literal">false</code>。

有关示例请参考 <a class="xref" href="query-dsl-intervals-query.html#interval-script-filter" title="Script filters">脚本过滤器(script filters)</a>。
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="intervals-query-note"></a>注意
</h3>
</div></div></div>
<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="interval-filter-rule-ex"></a>filter 示例
</h4>
</div></div></div>
<p>
下面这个例子包含一个 <code class="literal">filter</code> 规则。

它返回的文档中，单词 <code class="literal">hot</code> 和 <code class="literal">porridge</code> 的位置相差不超过 10 个，且中间没有单词 <code class="literal">salty</code>：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _search
{
  "query": {
    "intervals" : {
      "my_text" : {
        "match" : {
          "query" : "hot porridge",
          "max_gaps" : 10,
          "filter" : {
            "not_containing" : {
              "match" : {
                "query" : "salty"
              }
            }
          }
        }
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/109.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="interval-script-filter"></a>脚本过滤器 (script filters)
</h4>
</div></div></div>
<p>
可以使用脚本根据间隔的开始(start)位置、结束(end)位置和内部间隙(gap)计数来过滤间隔。

下面这个 <code class="literal">filter</code> 脚本将 <code class="literal">interval</code> 变量与 <code class="literal">start</code>、<code class="literal">end</code> 和 <code class="literal">gaps</code>方法一起使用：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _search
{
  "query": {
    "intervals" : {
      "my_text" : {
        "match" : {
          "query" : "hot porridge",
          "filter" : {
            "script" : {
              "source" : "interval.start &gt; 10 &amp;&amp; interval.end &lt; 20 &amp;&amp; interval.gaps == 0"
            }
          }
        }
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/110.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="interval-minimization"></a>最小限度(minimization)
</h4>
</div></div></div>
<p>
intervals 查询总是最小化间隔，以确保查询可以线性时间运行。

这有时会导致令人惊讶的结果，尤其是在使用 <code class="literal">max_gaps</code> 限制或 filter 时。

例如，以下面的查询为例，搜索包含在短语 <code class="literal">hot porridge</code> 中的 <code class="literal">salty</code>：
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _search
{
  "query": {
    "intervals" : {
      "my_text" : {
        "match" : {
          "query" : "salty",
          "filter" : {
            "contained_by" : {
              "match" : {
                "query" : "hot porridge"
              }
            }
          }
        }
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/111.console"></div>
<p>
该查询与包含短语 <code class="literal">hot porridge is salty porridge</code> 的文档<span class="strong strong"><strong>不</strong></span>匹配，因为 <code class="literal">hot porridge</code> 的匹配查询返回的间隔仅覆盖该文档中的前两个词项，并且这些词项与覆盖 <code class="literal">salty</code> 的间隔不重叠。
</p>
<p>
另一个需要注意的限制是包含重叠子规则的 <code class="literal">any_of</code> 规则的情况。

特别是，如果其中一个规则是另一个规则的严格 前缀(prefix)，那么更长的规则永远不会匹配，这在与 <code class="literal">max_gaps</code> 结合使用时会导致意外。

考虑下面这个查询，搜索 <code class="literal">the</code>， 后面紧接着 <code class="literal">big</code> 或  <code class="literal">big bad</code>，然后后面再紧接着 <code class="literal">wolf</code>：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _search
{
  "query": {
    "intervals" : {
      "my_text" : {
        "all_of" : {
          "intervals" : [
            { "match" : { "query" : "the" } },
            { "any_of" : {
                "intervals" : [
                    { "match" : { "query" : "big" } },
                    { "match" : { "query" : "big bad" } }
                ] } },
            { "match" : { "query" : "wolf" } }
          ],
          "max_gaps" : 0,
          "ordered" : true
        }
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/112.console"></div>
<p>
与直觉相反，这个查询与文档 <code class="literal">the big bad wolf</code> <span class="strong strong"><strong>不</strong></span> 匹配，

因为中间的 <code class="literal">any_of</code> 规则只产生 <code class="literal">big</code>的区间 - <code class="literal">big bad</code> 的区间比 <code class="literal">big</code>的区间长，

同时从相同的位置开始，因此被最小化。

在这些情况下，最好重写查询，以便所有选项都显式地显示在顶层：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _search
{
  "query": {
    "intervals" : {
      "my_text" : {
        "any_of" : {
          "intervals" : [
            { "match" : {
                "query" : "the big bad wolf",
                "ordered" : true,
                "max_gaps" : 0 } },
            { "match" : {
                "query" : "the big wolf",
                "ordered" : true,
                "max_gaps" : 0 } }
           ]
        }
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/113.console"></div>
</div>

</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="full-text-queries.html">« 全文查询</a>
</span>
<span class="next">
<a href="query-dsl-match-query.html">匹配(match)查询 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>